마지막 업데이트 2026-08-04
PPI 프로젝트 아키텍처의 핵심을 설명식으로 먼저 안내합니다. 기술적 결론과 원문 근거는 아래 본문에 보존되어 있습니다.
기존 본문 섹션에서 세부 근거를 이어서 확인합니다.
아동 대화 연습을 위한 AI 아바타 플랫폼 · Turborepo 모노레포 · LiveKit Agent(기본) / OpenAI Realtime + Mediasoup SFU
핑퐁이 음성 대화는 LiveKit Cloud SFU + apps/livekit-agent가, 수업 미디어(아동 영상·화면공유·진행자 모니터링)는 자체 mediasoup SFU(apps/socket)가 담당합니다. 두 SFU는 서로 통신하지 않고 아동 브라우저가 양쪽에 동시 참여해 다리를 놓습니다. 2026-08-03부터 신규 사용자 기본 대화 모드가 livekit(DEFAULT_CONVERSATION_MODE)이므로, 기본 경로는 OpenAI Realtime 단일 SFU가 아닌 이 2-SFU 구조입니다.
아동은 /client-guest, 치료사는 /main/meet, 모니터는 /monitor-dashboard에서 접속합니다.
Feature-Sliced Design 기반의 계층형 구조입니다.
런타임은 resolveVoiceSessionConfig()가 livekit / realtime / tts 중 하나로 정합니다. 신규 사용자 기본값은 livekit이며, 아바타에 Typecast 보이스가 없으면 Realtime으로 폴백합니다.
메인 웹 애플리케이션. 치료사 대시보드, 게스트 수업, API 라우트 포함.
Mediasoup SFU 전용 실시간 통신 서버. 게스트·호스트·모니터 시그널링 처리.
별도 운영 STT 처리 서버. Google Speech API 연동.
핑퐁이 음성 에이전트 워커. 웹이 직접 호출하지 않고 토큰의 roomConfig.agents(RoomAgentDispatch)로 LiveKit 서버가 ppi-agent를 소환합니다.
configRef로 수신agent-event-log로 전사·턴 상태 송출| 계층 | 파일 위치 | 역할 | 주요 항목 |
|---|---|---|---|
| Controller | lib/api/controllers/ | HTTP 요청 파싱 · 응답 포맷팅 | guest-data, lesson-session |
| Service | lib/api/services/ | 비즈니스 로직 처리 | guest-data, lesson-progress, resource |
| DAO | lib/api/dao/ | DynamoDB 직접 CRUD | 각 도메인별 DAO |
| Middleware | lib/auth.middleware.ts | API 인증 검증 | 토큰 기반 인증 |
| 환경 | 트리거 | URL 패턴 | 비고 |
|---|---|---|---|
| 개발 | 수동 (workflow_dispatch) | {branch}-app. |
3일 후 자동 삭제 |
| 운영 Web | deploy-web-prod.yml | 승인 후 배포 | |
| 운영 Socket | deploy-socket-prod.yml | socket. |
승인 후 배포 |